// exports.AL_Framework_Cache_Manager = void 0;
// var $resource = require("./AL_Framewrok_Resource");
// var $macros = require("./AL_Framework_Macros");
// var a = (function () {
//     function e(e) {
//         this._caches = new Map();
//         this.name = $macros.Macro.UNKNOWN;
//         this.name = e;
//     }
//     e.prototype.print = function (e) {
//         e.printLocal(this._caches, this.name);
//     };
//     e.prototype.get = function (e, t) {
//         if (this._caches.has(e)) {
//             var o = this._caches.get(e);
//             return t && o && o.shifou_wuxiao
//                 ? (Log.w("资源加载完成，但已经被释放 , 重新加载资源 : " + e), this.remove(e), null)
//                 : this._caches.get(e);
//         }
//         return null;
//     };
//     e.prototype.set = function (e, t) {
//         this._caches.set(e, t);
//     };
//     e.prototype.remove = function (e) {
//         return this._caches.delete(e);
//     };
//     e.prototype.removeUnuseCaches = function () {
//         var e = this;
//         this._caches.forEach(function (t, o) {
//             if (Array.isArray(t.data)) {
//                 var i = !0;
//                 for (var n = 0; n < t.data.length; n++) {
//                     if (t.data[n] && t.data[n].refCount > 0) {
//                         i = !1;
//                     }
//                 }
//                 if (i) {
//                     e._caches.delete(o);
//                 }
//             } else {
//                 if (t.data && t.data.refCount <= 0) {
//                     e._caches.delete(o);
//                 }
//             }
//         });
//     };
//     Object.defineProperty(e.prototype, "size", {
//         get: function () {
//             return this._caches.size;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     return e;
// })();
// var s = function () {
//     this.refCount = 0;
//     this.url = "";
//     this.retain = !1;
// };
// var r = (function () {
//     function e() {
//         this._caches = new Map();
//         this._spriteFrameCaches = new Map();
//         this._resMap = new Map();
//     }
//     e.prototype.get = function (e) {
//         return this._caches.has(e) ? this._caches.get(e) : null;
//     };
//     e.prototype.getSpriteFrame = function (e) {
//         if (this._spriteFrameCaches.has(e)) {
//             var t = this._spriteFrameCaches.get(e);
//             return this.get(e) ? t : (this.remove(e), null);
//         }
//         return null;
//     };
//     e.prototype.shezhi_sprite_frame = function (e, t) {
//         if (t && t instanceof cc.Texture2D) {
//             var o = this.getSpriteFrame(e);
//             if (o) {
//                 return o.data;
//             }
//             var n = new $resource.AL_Framewrok_Resource.CacheData();
//             n.data = new cc.SpriteFrame(t);
//             n.isLoaded = !0;
//             n.info.url = e;
//             this._spriteFrameCaches.set(e, n);
//             return n.data;
//         }
//         return null;
//     };
//     e.prototype.set = function (e, t) {
//         t.info.url = e;
//         this._caches.set(e, t);
//     };
//     e.prototype._getCacheInfo = function (e, t) {
//         if (void 0 === t) {
//             t = !0;
//         }
//         if (e && e.url && e.url.length > 0) {
//             if (!this._resMap.has(e.url)) {
//                 if (!t) {
//                     return null;
//                 }
//                 var o = new s();
//                 o.url = e.url;
//                 this._resMap.set(e.url, o);
//             }
//             return this._resMap.get(e.url);
//         }
//         return null;
//     };
//     e.prototype.retainAsset = function (e) {
//         if (e && e.data) {
//             var t = this._getCacheInfo(e);
//             if (t) {
//                 t.retain ? e.retain : (t.retain = e.retain);
//                 e.data.addRef();
//                 t.refCount++;
//                 if (t.retain) {
//                     t.refCount = 999999;
//                 }
//             }
//         }
//     };
//     e.prototype.releaseAsset = function (e) {
//         if (e && e.data) {
//             var t = this._getCacheInfo(e, !1);
//             if (t) {
//                 if (t.retain) {
//                     return;
//                 }
//                 t.refCount--;
//                 if (t.refCount <= 0) {
//                     this.remove(t.url);
//                 }
//             }
//         }
//     };
//     e.prototype.remove = function (e) {
//         this._resMap.delete(e);
//         if (this._spriteFrameCaches.has(e)) {
//             this._spriteFrameCaches.get(e).data.decRef();
//             this._spriteFrameCaches.delete(e);
//         }
//         var t = this._caches.has(e) ? this._caches.get(e) : null;
//         if (t && t.data instanceof sp.SkeletonData) {
//             this.remove(t.info.url + ".atlas");
//             this.remove(t.info.url + ".png");
//             this.remove(t.info.url + ".json");
//         }
//         if (t && t.data instanceof cc.Asset) {
//             t.data.decRef();
//             t.info.data = t.data;
//             Manager.releaseManager.shifang_yuancheng_ziyuan(t.info);
//         }
//         return this._caches.delete(e);
//     };
//     e.prototype.print = function (e) {
//         e.printRemote(this._spriteFrameCaches, this._caches, this._resMap);
//     };
//     return e;
// })();
// var c = (function () {
//     function e() {
//         this.logTag = "[AL_Framework_Cache_Manager]: ";
//         this._bundles = new Map();
//         this._remoteCaches = new r();
//     }
//     e.Instance = function () {
//         return this._instance || (this._instance = new e());
//     };
//     Object.defineProperty(e.prototype, "remote_Caches", {
//         get: function () {
//             return this._remoteCaches;
//         },
//         enumerable: !1,
//         configurable: !0
//     });
//     e.prototype.huoquZiyuanbaoMingzi = function (e) {
//         return Manager.bundleManager.huoquZiyuanbaoMingzi(e);
//     };
//     e.prototype.get = function (e, t, o) {
//         if (void 0 === o) {
//             o = !0;
//         }
//         var i = this.huoquZiyuanbaoMingzi(e);
//         return i && this._bundles.has(i) ? this._bundles.get(i).get(t, o) : null;
//     };
//     e.prototype.set = function (e, t, o) {
//         var i = this.huoquZiyuanbaoMingzi(e);
//         if (i) {
//             if (this._bundles.has(i)) {
//                 this._bundles.get(i).set(t, o);
//             } else {
//                 {
//                     var n = new a(i);
//                     n.set(t, o);
//                     this._bundles.set(i, n);
//                 }
//             }
//         }
//     };
//     e.prototype.remove = function (e, t) {
//         var o = this.huoquZiyuanbaoMingzi(e);
//         return !(!o || !this._bundles.has(o)) && this._bundles.get(o).remove(t);
//     };
//     e.prototype.remove_With_Info = function (e) {
//         if (e) {
//             if (e.data) {
//                 if (Array.isArray(e.data)) {
//                     var t = !0;
//                     for (var o = 0; o < e.data.length; o++) {
//                         e.data[o].decRef();
//                         0 != e.data[o].refCount && (t = !1);
//                     }
//                     if (t) {
//                         this.remove(e.bundle, e.url);
//                         return !0;
//                     }
//                 } else {
//                     e.data.decRef();
//                     if (0 == e.data.refCount) {
//                         this.remove(e.bundle, e.url);
//                         return !0;
//                     }
//                 }
//             } else {
//                 Log.e("info.data is null , bundle : " + e.bundle + " url : " + e.url);
//             }
//         } else {
//             Log.e("info is null");
//         }
//         return !1;
//     };
//     e.prototype.removeBundle = function (e) {
//         var t = this.huoquZiyuanbaoMingzi(e);
//         if (t && this._bundles.has(t)) {
//             this._bundles.delete(t);
//         }
//     };
//     e.prototype._yichuWeishiyongDeHuancun = function () {
//         this._bundles.forEach(function (e) {
//             if (e) {
//                 e.removeUnuseCaches();
//             }
//         });
//     };
//     e.prototype._huoquYibuHuancunCanshu = function () {
//         return arguments.length < 3 || "string" != typeof arguments[0]
//             ? null
//             : cc.js.isChildClassOf(arguments[1], cc.Asset)
//             ? {
//                   url: arguments[0],
//                   type: arguments[1],
//                   bundle: arguments[2],
//                   shifou_yanchi_shifang_ziyuan: arguments[3]
//               }
//             : null;
//     };
//     e.prototype.huoquHuancun = function () {
//         var e = arguments;
//         var t = this;
//         return new Promise(function (o) {
//             var i = t._huoquYibuHuancunCanshu.apply(t, e);
//             if (i) {
//                 var n = t.get(i.bundle, i.url);
//                 n
//                     ? n.isLoaded
//                         ? i.type
//                             ? n.data instanceof i.type
//                                 ? o(n.data)
//                                 : o(null)
//                             : o(n.data)
//                         : n.getCb.push(o)
//                     : o(null);
//             } else {
//                 o(null);
//             }
//         });
//     };
//     e.prototype.yibuHuoquHuancun = function () {
//         var e = this;
//         var t = this;
//         var o = this._huoquYibuHuancunCanshu.apply(this, arguments);
//         return new Promise(function (i) {
//             o
//                 ? t.huoquHuancun(o.url, o.type, o.bundle, o.shifou_yanchi_shifang_ziyuan).then(function (t) {
//                       o = o;
//                       t && t instanceof o.type
//                           ? i(t)
//                           : Manager.assetManager.load({
//                                 bundle: o.bundle,
//                                 path: o.url,
//                                 type: o.type,
//                                 onComplete: function (t) {
//                                     t && t.data && t.data instanceof o.type
//                                         ? i(t.data)
//                                         : (Log.e(e.logTag + "加载失败 : " + o.url), i(null));
//                                 },
//                                 shifou_yanchi_shifang_ziyuan: o.shifou_yanchi_shifang_ziyuan
//                             });
//                   })
//                 : i(null);
//         });
//     };
//     e.prototype.yibuHuoquJinlingZhen = function (e, t, o, n) {
//         var a = this;
//         return new Promise(function (s) {
//             var r = 0;
//             !(function c(l) {
//                 a.yibuHuoquHuancun(l, cc.SpriteAtlas, n).then(function (a) {
//                     var d = new $resource.AL_Framewrok_Resource.Info();
//                     d.url = l;
//                     d.type = cc.SpriteAtlas;
//                     d.data = a;
//                     d.bundle = n;
//                     o(d);
//                     if (a) {
//                         var u = a.getSpriteFrame(t);
//                         u
//                             ? cc.isValid(u)
//                                 ? s({
//                                       url: l,
//                                       spriteFrame: u
//                                   })
//                                 : (Log.e("精灵帧被释放，释放当前无法的图集资源 url ：" + l + " key : " + t),
//                                   Manager.assetManager.releaseAsset(d),
//                                   s({
//                                       url: l,
//                                       spriteFrame: null,
//                                       isTryReload: !0
//                                   }))
//                             : ++r >= e.length
//                             ? s({
//                                   url: l,
//                                   spriteFrame: null
//                               })
//                             : c(e[r]);
//                     } else {
//                         s({
//                             url: l,
//                             spriteFrame: null
//                         });
//                     }
//                 });
//             })(e[r]);
//         });
//     };
//     e.prototype.print = function (e) {
//         this._bundles.forEach(function (t) {
//             t.print(e);
//         });
//         this.remote_Caches.print(e);
//     };
//     e._instance = null;
//     return e;
// })();
// exports.AL_Framework_Cache_Manager = c;

const $resource = require("./AL_Framewrok_Resource");
const $macros = require("./AL_Framework_Macros");

/**
 * 缓存管理类
 */
class Cache {
    /**
     * 创建缓存管理实例
     * @param {string} name 名称
     */
    constructor(name) {
        /** @type {Map<string, any>} */
        this._caches = new Map();
        this.name = $macros.Macro.UNKNOWN;
        this.name = name;
    }

    /**
     * 打印缓存信息
     * @param {object} printer 打印对象
     */
    print(printer) {
        printer.printLocal(this._caches, this.name);
    }

    /**
     * 获取缓存
     * @param {string} key 键
     * @param {boolean} checkInvalid 检查是否无效
     * @returns {any} 缓存值
     */
    get(key, checkInvalid) {
        if (this._caches.has(key)) {
            const cache = this._caches.get(key);
            if (checkInvalid && cache && cache.shifou_wuxiao) {
                console.warn(`资源加载完成，但已经被释放 , 重新加载资源 : ${key}`);
                this.remove(key);
                return null;
            }
            return this._caches.get(key);
        }
        return null;
    }

    /**
     * 设置缓存
     * @param {string} key 键
     * @param {any} value 值
     */
    set(key, value) {
        this._caches.set(key, value);
    }

    /**
     * 移除缓存
     * @param {string} key 键
     * @returns {boolean} 是否成功移除
     */
    remove(key) {
        return this._caches.delete(key);
    }

    /**
     * 移除未使用的缓存
     */
    removeUnuseCaches() {
        this._caches.forEach((value, key) => {
            if (Array.isArray(value.data)) {
                let allUnused = true;
                for (const item of value.data) {
                    if (item && item.refCount > 0) {
                        allUnused = false;
                        break;
                    }
                }
                if (allUnused) {
                    this._caches.delete(key);
                }
            } else if (value.data && value.data.refCount <= 0) {
                this._caches.delete(key);
            }
        });
    }

    /**
     * 获取缓存大小
     * @returns {number} 缓存大小
     */
    get size() {
        return this._caches.size;
    }
}

/**
 * 资源信息类
 */
class ResourceInfo {
    constructor() {
        this.refCount = 0;
        this.url = "";
        this.retain = false;
    }
}

/**
 * 资源管理类
 */
class ResourceManager {
    constructor() {
        /** @type {Map<string, any>} */
        this._caches = new Map();
        /** @type {Map<string, any>} */
        this._spriteFrameCaches = new Map();
        /** @type {Map<string, ResourceInfo>} */
        this._resMap = new Map();
    }

    /**
     * 获取缓存
     * @param {string} key 键
     * @returns {any} 缓存值
     */
    get(key) {
        return this._caches.get(key) || null;
    }

    /**
     * 获取精灵帧缓存
     * @param {string} key 键
     * @returns {any} 缓存值
     */
    getSpriteFrame(key) {
        if (this._spriteFrameCaches.has(key)) {
            const spriteFrameCache = this._spriteFrameCaches.get(key);
            if (this.get(key)) {
                return spriteFrameCache;
            }
            this.remove(key);
            return null;
        }
        return null;
    }

    /**
     * 设置精灵帧缓存
     * @param {string} key 键
     * @param {cc.Texture2D} texture 纹理
     * @returns {cc.SpriteFrame|null} 精灵帧
     */
    shezhi_sprite_frame(key, texture) {
        if (texture && texture instanceof cc.Texture2D) {
            let spriteFrameCache = this.getSpriteFrame(key);
            if (spriteFrameCache) {
                return spriteFrameCache.data;
            }
            const cacheData = new $resource.AL_Framewrok_Resource.CacheData();
            cacheData.data = new cc.SpriteFrame(texture);
            cacheData.isLoaded = true;
            cacheData.info.url = key;
            this._spriteFrameCaches.set(key, cacheData);
            return cacheData.data;
        }
        return null;
    }

    /**
     * 设置缓存
     * @param {string} key 键
     * @param {any} value 值
     */
    set(key, value) {
        value.info.url = key;
        this._caches.set(key, value);
    }

    /**
     * 获取缓存信息
     * @param {any} info 信息
     * @param {boolean} [createIfNotExists=true] 如果不存在是否创建
     * @returns {ResourceInfo|null} 资源信息
     */
    _getCacheInfo(info, createIfNotExists = true) {
        if (info && info.url && info.url.length > 0) {
            if (!this._resMap.has(info.url)) {
                if (!createIfNotExists) {
                    return null;
                }
                const resInfo = new ResourceInfo();
                resInfo.url = info.url;
                this._resMap.set(info.url, resInfo);
            }
            return this._resMap.get(info.url);
        }
        return null;
    }

    /**
     * 保留资源
     * @param {any} cache 缓存
     */
    retainAsset(cache) {
        if (cache && cache.data) {
            const cacheInfo = this._getCacheInfo(cache);
            if (cacheInfo) {
                if (cacheInfo.retain) {
                    cache.retain = cacheInfo.retain;
                }
                cache.data.addRef();
                cacheInfo.refCount++;
                if (cacheInfo.retain) {
                    cacheInfo.refCount = 999999;
                }
            }
        }
    }

    /**
     * 释放资源
     * @param {any} cache 缓存
     */
    releaseAsset(cache) {
        if (cache && cache.data) {
            const cacheInfo = this._getCacheInfo(cache, false);
            if (cacheInfo && !cacheInfo.retain) {
                cacheInfo.refCount--;
                if (cacheInfo.refCount <= 0) {
                    this.remove(cacheInfo.url);
                }
            }
        }
    }

    /**
     * 移除缓存
     * @param {string} key 键
     * @returns {boolean} 是否成功移除
     */
    remove(key) {
        this._resMap.delete(key);

        if (this._spriteFrameCaches.has(key)) {
            const spriteFrameCache = this._spriteFrameCaches.get(key);
            spriteFrameCache.data.decRef();
            this._spriteFrameCaches.delete(key);
        }

        const cache = this._caches.get(key);
        if (cache && cache.data instanceof sp.SkeletonData) {
            this.remove(`${cache.info.url}.atlas`);
            this.remove(`${cache.info.url}.png`);
            this.remove(`${cache.info.url}.json`);
        }

        if (cache && cache.data instanceof cc.Asset) {
            cache.data.decRef();
            cache.info.data = cache.data;
            Manager.releaseManager.shifang_yuancheng_ziyuan(cache.info);
        }

        return this._caches.delete(key);
    }

    /**
     * 打印缓存信息
     * @param {object} printer 打印对象
     */
    print(printer) {
        printer.printRemote(this._spriteFrameCaches, this._caches, this._resMap);
    }
}

/**
 * 缓存管理器
 */
class AL_Framework_Cache_Manager {
    constructor() {
        this.logTag = "[AL_Framework_Cache_Manager]: ";
        /** @type {Map<string, Cache>} */
        this._bundles = new Map();
        /** @type {ResourceManager} */
        this._remoteCaches = new ResourceManager();
    }

    /**
     * 获取实例
     * @returns {AL_Framework_Cache_Manager} 实例
     */
    static Instance() {
        if (!this._instance) {
            this._instance = new AL_Framework_Cache_Manager();
        }
        return this._instance;
    }

    /**
     * 获取远程缓存管理器
     * @returns {ResourceManager} 远程缓存管理器
     */
    get remote_Caches() {
        return this._remoteCaches;
    }

    /**
     * 获取包名称
     * @param {string} name 名称
     * @returns {string} 包名称
     */
    huoquZiyuanbaoMingzi(name) {
        return Manager.bundleManager.huoquZiyuanbaoMingzi(name);
    }

    /**
     * 获取缓存
     * @param {string} bundle 包名称
     * @param {string} key 键
     * @param {boolean} [createIfNotExists=true] 如果不存在是否创建
     * @returns {any} 缓存值
     */
    get(bundle, key, createIfNotExists = true) {
        const bundleName = this.huoquZiyuanbaoMingzi(bundle);
        if (bundleName && this._bundles.has(bundleName)) {
            return this._bundles.get(bundleName).get(key, createIfNotExists);
        }
        return null;
    }

    /**
     * 设置缓存
     * @param {string} bundle 包名称
     * @param {string} key 键
     * @param {any} value 值
     */
    set(bundle, key, value) {
        const bundleName = this.huoquZiyuanbaoMingzi(bundle);
        if (bundleName) {
            if (this._bundles.has(bundleName)) {
                this._bundles.get(bundleName).set(key, value);
            } else {
                const newCache = new Cache(bundleName);
                newCache.set(key, value);
                this._bundles.set(bundleName, newCache);
            }
        }
    }

    /**
     * 移除缓存
     * @param {string} bundle 包名称
     * @param {string} key 键
     * @returns {boolean} 是否成功移除
     */
    remove(bundle, key) {
        const bundleName = this.huoquZiyuanbaoMingzi(bundle);
        return bundleName && this._bundles.has(bundleName) && this._bundles.get(bundleName).remove(key);
    }

    /**
     * 根据信息移除缓存
     * @param {any} info 缓存信息
     * @returns {boolean} 是否成功移除
     */
    remove_With_Info(info) {
        if (info) {
            if (info.data) {
                if (Array.isArray(info.data)) {
                    let allUnused = true;
                    for (const item of info.data) {
                        item.decRef();
                        if (item.refCount !== 0) {
                            allUnused = false;
                        }
                    }
                    if (allUnused) {
                        this.remove(info.bundle, info.url);
                        return true;
                    }
                } else {
                    info.data.decRef();
                    if (info.data.refCount === 0) {
                        this.remove(info.bundle, info.url);
                        return true;
                    }
                }
            } else {
                console.error(`info.data is null , bundle : ${info.bundle} url : ${info.url}`);
            }
        } else {
            console.error('info is null');
        }
        return false;
    }

    /**
     * 移除包
     * @param {string} bundle 包名称
     */
    removeBundle(bundle) {
        const bundleName = this.huoquZiyuanbaoMingzi(bundle);
        if (bundleName && this._bundles.has(bundleName)) {
            this._bundles.delete(bundleName);
        }
    }

    /**
     * 移除未使用的缓存
     */
    _yichuWeishiyongDeHuancun() {
        this._bundles.forEach(bundle => {
            if (bundle) {
                bundle.removeUnuseCaches();
            }
        });
    }

    /**
     * 获取异步缓存参数
     * @returns {object|null} 异步缓存参数
     */
    _huoquYibuHuancunCanshu() {
        if (arguments.length < 3 || typeof arguments[0] !== 'string') {
            return null;
        }
        if (cc.js.isChildClassOf(arguments[1], cc.Asset)) {
            return {
                url: arguments[0],
                type: arguments[1],
                bundle: arguments[2],
                shifou_yanchi_shifang_ziyuan: arguments[3]
            };
        }
        return null;
    }

    /**
     * 获取缓存
     * @returns {Promise<any>} 缓存值
     */
    huoquHuancun() {
        const args = arguments;
        return new Promise(resolve => {
            const cacheArgs = this._huoquYibuHuancunCanshu.apply(this, args);
            if (cacheArgs) {
                const cacheItem = this.get(cacheArgs.bundle, cacheArgs.url);
                if (cacheItem) {
                    if (cacheItem.isLoaded) {
                        if (cacheArgs.type) {
                            if (cacheItem.data instanceof cacheArgs.type) {
                                resolve(cacheItem.data);
                            } else {
                                resolve(null);
                            }
                        } else {
                            resolve(cacheItem.data);
                        }
                    } else {
                        cacheItem.getCb.push(resolve);
                    }
                } else {
                    resolve(null);
                }
            } else {
                resolve(null);
            }
        });
    }

    /**
     * 异步获取缓存
     * @returns {Promise<any>} 缓存值
     */
    async yibuHuoquHuancun() {
        const cacheArgs = this._huoquYibuHuancunCanshu.apply(this, arguments);
        if (!cacheArgs) {
            return null;
        }

        const cacheData = await this.huoquHuancun(cacheArgs.url, cacheArgs.type, cacheArgs.bundle, cacheArgs.shifou_yanchi_shifang_ziyuan);
        if (cacheData && cacheData instanceof cacheArgs.type) {
            return cacheData;
        }

        return new Promise(resolve => {
            Manager.assetManager.load({
                bundle: cacheArgs.bundle,
                path: cacheArgs.url,
                type: cacheArgs.type,
                onComplete: result => {
                    if (result && result.data && result.data instanceof cacheArgs.type) {
                        resolve(result.data);
                    } else {
                        console.error(`${this.logTag}加载失败 : ${cacheArgs.url}`);
                        resolve(null);
                    }
                },
                shifou_yanchi_shifang_ziyuan: cacheArgs.shifou_yanchi_shifang_ziyuan
            });
        });
    }

    /**
     * 异步获取精灵帧
     * @param {string[]} urls URL数组
     * @param {string} key 键
     * @param {function} callback 回调函数
     * @param {string} bundle 包名称
     * @returns {Promise<object>} 结果
     */
    async yibuHuoquJinlingZhen(urls, key, callback, bundle) {
        let retryCount = 0;

        const tryLoad = async (url) => {
            const atlas = await this.yibuHuoquHuancun(url, cc.SpriteAtlas, bundle);
            const info = new $resource.AL_Framewrok_Resource.Info();
            info.url = url;
            info.type = cc.SpriteAtlas;
            info.data = atlas;
            info.bundle = bundle;
            callback(info);

            if (atlas) {
                const spriteFrame = atlas.getSpriteFrame(key);
                if (spriteFrame && cc.isValid(spriteFrame)) {
                    return { url, spriteFrame };
                }

                console.error(`精灵帧被释放，释放当前无法的图集资源 url ：${url} key : ${key}`);
                Manager.assetManager.releaseAsset(info);
                return { url, spriteFrame: null, isTryReload: true };
            }

            return { url, spriteFrame: null };
        };

        for (const url of urls) {
            const result = await tryLoad(url);
            if (result.spriteFrame || retryCount >= urls.length) {
                return result;
            }
            retryCount++;
        }

        return { url: urls[retryCount], spriteFrame: null };
    }

    /**
     * 打印缓存信息
     * @param {object} printer 打印对象
     */
    print(printer) {
        this._bundles.forEach(bundle => {
            bundle.print(printer);
        });
        this.remote_Caches.print(printer);
    }
}

AL_Framework_Cache_Manager._instance = null;

exports.AL_Framework_Cache_Manager = AL_Framework_Cache_Manager;
